<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- 
	Copyright (C) 2007, 2008, 2009, 2010, 2011. PARP Research Group.
	<http://perception.inf.um.es>
	University of Murcia, Spain.

	This file is part of the QVision library.

	QVision is free software: you can redistribute it and/or modify
	it under the terms of the GNU Lesser General Public License as
	published by the Free Software Foundation, version 3 of the License.

	QVision is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with QVision. If not, see <http://www.gnu.org/licenses/>.
-->

<html><head><meta http-equiv="content-Type" content="text/html;charset=UTF-8">
<title>QVision: Qt&#39;s Image, Video and Computer Vision Library</title>
<meta name="title" content="QVision" />
<meta name="dc.title" content="QVision" />
<meta name="url" content="http://perception.inf.um.es/QVision" />
<meta name="author" content="PARP Research Group - http://perception.inf.um.es" />
<meta name="revisit-after" content="30 DAYS"/>
<meta name="robots" content="index,follow"/>
<meta name="classification" content="*">
<meta name="rating" content="Safe For Kids">
<meta name="distribution" content="GLOBAL"/>
<meta name="description" content="Qt's Image, Video and Computer Vision Library"/>
<meta name="page-topic" content="Computer Vision research and prototype programming"/>
<meta name="geo.country" content="ES" />

<!--
Keywords:
By license:		open source, gnu, lgpl, gpl, free
By theme:		computer vision, image processing, robotics, programming, source, development
By usage:		library, toolkit, framework, prototype, application
By programming specs:	object oriented, c++, block programming, reusability, gui, graphical, parallel computing, high performance, GPU, prototyping
Interoperability with:	Qt, GSL, GNU Scientific library, OpenCV, CGAL, QWT, CUDA, mplayer, IPP, Intel Image Performance Primitives, blas, lapack
Functionallity:		image features, matrix algebra, projective geometry, mser, function minimization, function optimization, canny operator, harris operator, corner detection, performance evaluation, cpu usage, graphical interface
Main data-types:	matrix, vector, tensor, quaternion, image, polyline
Video sources:		webcam, camera, stream
Devices:		embedded, desktop computer, laptop, mini-laptop
Authors:		PARP research group. University of Murcia, Spain.
-->

<meta name="keywords" content="augmented reality, sfm, structure from motion, open source, gnu, lgpl, gpl, free, computer vision, image processing, robotics, programming, source, development, library, toolkit, framework, prototype, application, object oriented, c++, block programming, reusability, gui, graphical, parallel computing, high performance, GPU, prototyping, Qt, GSL, GNU Scientific library, OpenCV, CGAL, QWT, CUDA, mplayer, IPP, Intel Image Performance Primitives, blas, lapack, image features, matrix algebra, projective geometry, mser, function minimization, function optimization, canny operator, harris operator, corner detection, performance evaluation, cpu usage, graphical interface, matrix, vector, tensor, quaternion, image, polyline, webcam, camera, stream, embedded, desktop computer, laptop, mini-laptop, University of Murcia, Spain, PARP research group, vision por computador"/>
<meta http-equiv="keywords" content="augmented reality, sfm, structure from motion, open source, gnu, lgpl, gpl, free, computer vision, image processing, robotics, programming, source, development, library, toolkit, framework, prototype, application, object oriented, c++, block programming, reusability, gui, graphical, parallel computing, high performance, GPU, prototyping, Qt, GSL, GNU Scientific library, OpenCV, CGAL, QWT, CUDA, mplayer, IPP, Intel Image Performance Primitives, blas, lapack, image features, matrix algebra, projective geometry, mser, function minimization, function optimization, canny operator, harris operator, corner detection, performance evaluation, cpu usage, graphical interface, matrix, vector, tensor, quaternion, image, polyline, webcam, camera, stream, embedded, desktop computer, laptop, mini-laptop, University of Murcia, Spain, PARP research group, vision por computador"/>
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="title" content="QVision"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="tabs.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" />
</head><body>

<table width="100%"><tr>
	<td><a href="http://perception.inf.um.es/"><img src="parp.png" border="0" /> <big>PARP Research Group</big></a></td>
	<td align="right"><a href="http://www.um.es/"><big>Universidad de Murcia</big> <img src="um.png" border="0" /></a></td>
</tr></table>

<hr /><br />

<table width="95%" align="center"><tr><td>

<!-- Generated by Doxygen 1.6.3 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <form id="FSearchBox" action="search.php" method="get">
            <img id="MSearchSelect" src="search/search.png" alt=""/>
            <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                   onfocus="searchBox.OnSearchFieldFocus(true)" 
                   onblur="searchBox.OnSearchFieldFocus(false)"/>
          </form>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
<h1>examples/videoReader/videoReader.cpp</h1><a href="videoReader_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> *   Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012. PARP Research Group.</span>
<a name="l00003"></a>00003 <span class="comment"> *   &lt;http://perception.inf.um.es&gt;</span>
<a name="l00004"></a>00004 <span class="comment"> *   University of Murcia, Spain.</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> *   This file is part of the QVision library.</span>
<a name="l00007"></a>00007 <span class="comment"> *</span>
<a name="l00008"></a>00008 <span class="comment"> *   QVision is free software: you can redistribute it and/or modify</span>
<a name="l00009"></a>00009 <span class="comment"> *   it under the terms of the GNU Lesser General Public License as</span>
<a name="l00010"></a>00010 <span class="comment"> *   published by the Free Software Foundation, version 3 of the License.</span>
<a name="l00011"></a>00011 <span class="comment"> *</span>
<a name="l00012"></a>00012 <span class="comment"> *   QVision is distributed in the hope that it will be useful,</span>
<a name="l00013"></a>00013 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00014"></a>00014 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00015"></a>00015 <span class="comment"> *   GNU Lesser General Public License for more details.</span>
<a name="l00016"></a>00016 <span class="comment"> *</span>
<a name="l00017"></a>00017 <span class="comment"> *   You should have received a copy of the GNU Lesser General Public</span>
<a name="l00018"></a>00018 <span class="comment"> *   License along with QVision. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<a name="l00019"></a>00019 <span class="comment"> */</span>
<a name="l00020"></a>00020 
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;QVApplication&gt;</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;QVPropertyContainer&gt;</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;QVImage&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;QVVideoReader&gt;</span>
<a name="l00061"></a>00061 
<a name="l00062"></a>00062 <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])
<a name="l00063"></a>00063     {
<a name="l00064"></a>00064     <a class="code" href="classQVApplication.html" title="Main class for QVision applications.">QVApplication</a> app(argc,argv,
<a name="l00065"></a>00065                       <span class="stringliteral">&quot;This program will save a series of requested frames in individual image files, as captured \n&quot;</span>
<a name="l00066"></a>00066                       <span class="stringliteral">&quot;from a generic video source, which can be anything from a webcam or a firewire cam, to a video \n&quot;</span>
<a name="l00067"></a>00067                       <span class="stringliteral">&quot;file, a TDT channel, a DVD, remote sources (via http or rtsp protocols) to even directories \n&quot;</span>
<a name="l00068"></a>00068                       <span class="stringliteral">&quot;containing sequences of images in individual frames. See documentation on class QVVideoReader \n&quot;</span>
<a name="l00069"></a>00069                       <span class="stringliteral">&quot;for further information on about the format and types of accepted source video identifier \n&quot;</span>
<a name="l00070"></a>00070                       <span class="stringliteral">&quot;strings.\n&quot;</span>
<a name="l00071"></a>00071                       <span class="stringliteral">&quot;\nHere are some URL examples:\n&quot;</span>
<a name="l00072"></a>00072                       <span class="stringliteral">&quot;Reading directly an uncompressed yuv4mpeg file:\n&quot;</span>
<a name="l00073"></a>00073                       <span class="stringliteral">&quot;    ./videoReader --URL=yuv4mpeg:///home/pedroe/svnvideos/futbol.yuv\n&quot;</span>
<a name="l00074"></a>00074                       <span class="stringliteral">&quot;Reading directly a sequence of images in a given directory:\n&quot;</span>
<a name="l00075"></a>00075                       <span class="stringliteral">&quot;    ./videoReader --URL=dir:///home/pedroe/imagenes\n&quot;</span>
<a name="l00076"></a>00076                       <span class="stringliteral">&quot;Reading a video file through OpenCV (needs the OpenCV library):\n&quot;</span>
<a name="l00077"></a>00077                       <span class="stringliteral">&quot;    ./videoReader --URL=cvf:///home/pedroe/svnvideos/arrow.avi\n&quot;</span>
<a name="l00078"></a>00078                       <span class="stringliteral">&quot;Reading a webcam/firewire camera through OpenCV (needs the OpenCV library):\n&quot;</span>
<a name="l00079"></a>00079                       <span class="stringliteral">&quot;    ./videoReader --URL=cvc://#0\n&quot;</span>
<a name="l00080"></a>00080                       <span class="stringliteral">&quot;Reading a video file through mplayer (needs mplayer installed):\n&quot;</span>
<a name="l00081"></a>00081                       <span class="stringliteral">&quot;    ./videoReader --URL=file:///home/pedroe/svnvideos/penguin.dv\n&quot;</span>
<a name="l00082"></a>00082                       <span class="stringliteral">&quot;Reading remote sources using mplayer(needs mplayer installed):\n&quot;</span>
<a name="l00083"></a>00083                       <span class="stringliteral">&quot;    ./videoReader --URL=http://perception.inf.um.es/public_data/videos/misc/minuto.avi\n&quot;</span>
<a name="l00084"></a>00084                       <span class="stringliteral">&quot;    ./videoReader --URL=rtsp://v7.cache4.c.youtube.com/CjgLENy73wIaLwmNoYPdmgJFpRMYJCAkFEIJbXYtZ29vZ2xlSARSB3Jlc3VsdHNg-uzp15Dl_9FNDA==/0/0/0/video.3gp&quot;</span>,
<a name="l00085"></a>00085                       FALSE);
<a name="l00086"></a>00086 
<a name="l00087"></a>00087     <span class="comment">// Property container for easy reading of command line arguments:</span>
<a name="l00088"></a>00088     <a class="code" href="classQVPropertyContainer.html" title="Base class for dynamic property container objects.">QVPropertyContainer</a> forArgs(<span class="stringliteral">&quot;videoReader&quot;</span>);
<a name="l00089"></a>00089     forArgs.addProperty&lt;QString&gt;(<span class="stringliteral">&quot;URL&quot;</span>,QVPropertyContainer::inputFlag,<span class="stringliteral">&quot;ocvc:#0&quot;</span>,
<a name="l00090"></a>00090                                  <span class="stringliteral">&quot;URL to read video from (default OpenCV main camera)&quot;</span>);
<a name="l00091"></a>00091     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;Rows&quot;</span>,QVPropertyContainer::inputFlag,0,
<a name="l00092"></a>00092                              <span class="stringliteral">&quot;Number of rows of output image (0-&gt;same as input)&quot;</span>,0,65536);
<a name="l00093"></a>00093     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;Cols&quot;</span>,QVPropertyContainer::inputFlag,0,
<a name="l00094"></a>00094                              <span class="stringliteral">&quot;Number of columns of output image (0-&gt;same as input)&quot;</span>,0,65536);
<a name="l00095"></a>00095     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;fps&quot;</span>,QVPropertyContainer::inputFlag,0,
<a name="l00096"></a>00096                              <span class="stringliteral">&quot;(Requested) number of frames per second (0-&gt;same as input)&quot;</span>,0,200);
<a name="l00097"></a>00097     forArgs.addProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;NoLoop&quot;</span>,QVPropertyContainer::inputFlag,<span class="keyword">false</span>,
<a name="l00098"></a>00098                               <span class="stringliteral">&quot;Whether the video should loop or not when reaching the end (only valid for non live sources)&quot;</span>);
<a name="l00099"></a>00099     forArgs.addProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;Deinterlaced&quot;</span>,QVPropertyContainer::inputFlag,<span class="keyword">false</span>,
<a name="l00100"></a>00100                               <span class="stringliteral">&quot;Whether the video should be deinterlaced or not (only valid for mplayer sources)&quot;</span>);
<a name="l00101"></a>00101     forArgs.addProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;RealTime&quot;</span>,QVPropertyContainer::inputFlag,<span class="keyword">false</span>,
<a name="l00102"></a>00102                               <span class="stringliteral">&quot;If the camera should be read in real time (at requested fps) or as fast as possible (not valid for live sources)&quot;</span>);
<a name="l00103"></a>00103     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;skip&quot;</span>,QVPropertyContainer::inputFlag,0,
<a name="l00104"></a>00104                              <span class="stringliteral">&quot;Number of frames to skip between dumped frames&quot;</span>,0,65536);
<a name="l00105"></a>00105     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;frames&quot;</span>,QVPropertyContainer::inputFlag,10,
<a name="l00106"></a>00106                              <span class="stringliteral">&quot;Number of frames to dump&quot;</span>,1,65536);
<a name="l00107"></a>00107     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;initpos&quot;</span>,QVPropertyContainer::inputFlag,0.0,
<a name="l00108"></a>00108                              <span class="stringliteral">&quot;Initial position of video (in number of frames)&quot;</span>,0.0,100000.0);
<a name="l00109"></a>00109     forArgs.addProperty&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;mode&quot;</span>,QVPropertyContainer::inputFlag,0,
<a name="l00110"></a>00110                              <span class="stringliteral">&quot;Read mode (0-&gt;RGB, 1-&gt;RGB (separate), 2-&gt;Gray, 3-&gt;YUV (separate))&quot;</span>,0,3);
<a name="l00111"></a>00111     forArgs.addProperty&lt;QString&gt;(<span class="stringliteral">&quot;ext&quot;</span>,QVPropertyContainer::inputFlag,<span class="stringliteral">&quot;jpg&quot;</span>,
<a name="l00112"></a>00112                                  <span class="stringliteral">&quot;Image format for output images (selected by extension name)&quot;</span>);
<a name="l00113"></a>00113 
<a name="l00114"></a>00114     QString URL          = forArgs.getPropertyValue&lt;QString&gt;(<span class="stringliteral">&quot;URL&quot;</span>);
<a name="l00115"></a>00115     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Rows    = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;Rows&quot;</span>);
<a name="l00116"></a>00116     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Cols    = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;Cols&quot;</span>);
<a name="l00117"></a>00117     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fps     = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;fps&quot;</span>);
<a name="l00118"></a>00118     <span class="keywordtype">bool</span> NoLoop          = forArgs.getPropertyValue&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;NoLoop&quot;</span>);
<a name="l00119"></a>00119     <span class="keywordtype">bool</span> Deinterlaced    = forArgs.getPropertyValue&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;Deinterlaced&quot;</span>);
<a name="l00120"></a>00120     <span class="keywordtype">bool</span> RealTime        = forArgs.getPropertyValue&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;RealTime&quot;</span>);
<a name="l00121"></a>00121     <a class="code" href="classQVVideoReader.html#a5897497caf38c09bace454d3e205ede0" title="Open options for a video source.">QVVideoReader::OpenOptions</a> options = <a class="code" href="classQVVideoReader.html#a0a3fbed9c7741e2c85c65df76c8e604baead4ae3954a9b6c0bd876f8413c32bd0" title="Default options: don&amp;#39;t include any of the other options.">QVVideoReader::Default</a>;
<a name="l00122"></a>00122     <span class="keywordflow">if</span>(NoLoop)       options |= <a class="code" href="classQVVideoReader.html#a0a3fbed9c7741e2c85c65df76c8e604bafa19a0a74c786eaa4d71f5102a1a7aa3" title="Continue from the beginning of the video source when it reaches the end.">QVVideoReader::NoLoop</a>;
<a name="l00123"></a>00123     <span class="keywordflow">if</span>(Deinterlaced) options |= <a class="code" href="classQVVideoReader.html#a0a3fbed9c7741e2c85c65df76c8e604bad86fd4f8748cc6613fb55d663052ccbd" title="(Mplayer only) Make mplayer deinterlace the image (odd lines).">QVVideoReader::Deinterlaced</a>;
<a name="l00124"></a>00124     <span class="keywordflow">if</span>(RealTime)     options |= <a class="code" href="classQVVideoReader.html#a0a3fbed9c7741e2c85c65df76c8e604ba0125897d48c0c6f4d1b399bb2d3b746d">QVVideoReader::RealTime</a>;
<a name="l00125"></a>00125     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> skip    = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;skip&quot;</span>);
<a name="l00126"></a>00126     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frames  = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;frames&quot;</span>);
<a name="l00127"></a>00127     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> initpos = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;initpos&quot;</span>);
<a name="l00128"></a>00128     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mode    = forArgs.getPropertyValue&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;mode&quot;</span>);
<a name="l00129"></a>00129     QString ext          = forArgs.getPropertyValue&lt;QString&gt;(<span class="stringliteral">&quot;ext&quot;</span>);
<a name="l00130"></a>00130 
<a name="l00131"></a>00131     <span class="comment">// If user just asked for help on the application, show it and exit:</span>
<a name="l00132"></a>00132     <span class="keywordflow">if</span>(app.arguments().contains(<span class="stringliteral">&quot;--help&quot;</span>))
<a name="l00133"></a>00133     {
<a name="l00134"></a>00134         std::cout &lt;&lt; qPrintable(app.getHelp());
<a name="l00135"></a>00135         exit(0);
<a name="l00136"></a>00136     }
<a name="l00137"></a>00137 
<a name="l00138"></a>00138     <span class="comment">// Check output image format:</span>
<a name="l00139"></a>00139     QStringList extensions;
<a name="l00140"></a>00140     extensions &lt;&lt; <span class="stringliteral">&quot;jpg&quot;</span> &lt;&lt; <span class="stringliteral">&quot;png&quot;</span> &lt;&lt; <span class="stringliteral">&quot;bmp&quot;</span> &lt;&lt; <span class="stringliteral">&quot;pgm&quot;</span> &lt;&lt; <span class="stringliteral">&quot;gif&quot;</span> &lt;&lt; <span class="stringliteral">&quot;jpeg&quot;</span> &lt;&lt; <span class="stringliteral">&quot;pbm&quot;</span> &lt;&lt; <span class="stringliteral">&quot;ppm&quot;</span> &lt;&lt; <span class="stringliteral">&quot;tiff&quot;</span> &lt;&lt; <span class="stringliteral">&quot;xbm&quot;</span> &lt;&lt; <span class="stringliteral">&quot;xpm&quot;</span>;
<a name="l00141"></a>00141     <span class="keywordflow">if</span>(not extensions.contains(ext))
<a name="l00142"></a>00142         {
<a name="l00143"></a>00143             std::cout &lt;&lt; <span class="stringliteral">&quot;Error: output format &quot;</span> &lt;&lt; qPrintable(ext) &lt;&lt; <span class="stringliteral">&quot; not supported.\n&quot;</span>;
<a name="l00144"></a>00144             exit(1);
<a name="l00145"></a>00145         }
<a name="l00146"></a>00146 
<a name="l00147"></a>00147     <span class="comment">// Open video and report relevant info:</span>
<a name="l00148"></a>00148     <a class="code" href="classQVVideoReader.html" title="Extremely versatile class to read from multiple video devices and video/image file...">QVVideoReader</a> videoReader;
<a name="l00149"></a>00149     <a class="code" href="classQVVideoReader.html#ae7f437e441e6b0d6c0acbb1edbdc6421" title="Possible preferred modes for video sources.">QVVideoReader::TSourceMode</a> source_mode;
<a name="l00150"></a>00150     <span class="keywordflow">if</span> (!videoReader.<a class="code" href="classQVVideoReader.html#a6f4fe8891a6fcdfbfaf31302af10785c" title="Opens a video source given by its URL, trying to use requested options, mode, speed...">open</a>(URL,Cols,Rows,fps,options,source_mode))
<a name="l00151"></a>00151         {
<a name="l00152"></a>00152         std::cout &lt;&lt; <span class="stringliteral">&quot;Error opening requested video source (&quot;</span> &lt;&lt; qPrintable(URL) &lt;&lt; <span class="stringliteral">&quot;).\n&quot;</span>;
<a name="l00153"></a>00153         exit(2);
<a name="l00154"></a>00154         }
<a name="l00155"></a>00155     std::cout &lt;&lt; <span class="stringliteral">&quot;Video source successfully opened. Info on source:\n&quot;</span>;
<a name="l00156"></a>00156     std::cout &lt;&lt; <span class="stringliteral">&quot;  Output cols: &quot;</span> &lt;&lt; Cols &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;
<a name="l00157"></a>00157     std::cout &lt;&lt; <span class="stringliteral">&quot;  Output rows: &quot;</span> &lt;&lt; Rows &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;
<a name="l00158"></a>00158     std::cout &lt;&lt; <span class="stringliteral">&quot;  Output fps: &quot;</span> &lt;&lt; fps &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;
<a name="l00159"></a>00159     std::cout &lt;&lt; <span class="stringliteral">&quot;  Video preferred source mode (other outputs need conversion): &quot;</span>;
<a name="l00160"></a>00160     <span class="keywordflow">if</span>(source_mode == <a class="code" href="classQVVideoReader.html#ae7f437e441e6b0d6c0acbb1edbdc6421afdd3c4ba8977741d57f806a72aa11b96" title="Source outputs YUV images by default.">QVVideoReader::YUVMode</a>)
<a name="l00161"></a>00161         std::cout &lt;&lt; <span class="stringliteral">&quot;YUV mode.&quot;</span>;
<a name="l00162"></a>00162     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(source_mode == <a class="code" href="classQVVideoReader.html#ae7f437e441e6b0d6c0acbb1edbdc6421a65e1ba18291e438596be5197a7901337" title="Source outputs RGB images by default.">QVVideoReader::RGBMode</a>)
<a name="l00163"></a>00163         std::cout &lt;&lt; <span class="stringliteral">&quot;RGB mode.&quot;</span>;
<a name="l00164"></a>00164     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(source_mode == <a class="code" href="classQVVideoReader.html#ae7f437e441e6b0d6c0acbb1edbdc6421aaade5d3cb39ca255bd2a8537a8fa9e36" title="Source outputs gray only (BW) images by default.">QVVideoReader::GrayOnlyMode</a>)
<a name="l00165"></a>00165         std::cout &lt;&lt; <span class="stringliteral">&quot;Gray only mode.&quot;</span>;
<a name="l00166"></a>00166     std::cout &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00167"></a>00167 
<a name="l00168"></a>00168     <span class="comment">// Seek for initial position:</span>
<a name="l00169"></a>00169     <span class="keywordflow">if</span>(initpos != 0)
<a name="l00170"></a>00170         videoReader.<a class="code" href="classQVVideoReader.html#aef184d33d65b5e7cca33189a148f1037" title="Tries to move to a given position in the video source (if possible).">seek</a>(initpos);
<a name="l00171"></a>00171 
<a name="l00172"></a>00172     <span class="comment">// Start grabbing:</span>
<a name="l00173"></a>00173     <a class="code" href="classQVImage.html">QVImage&lt;uChar,3&gt;</a> imageRGB;
<a name="l00174"></a>00174     <a class="code" href="classQVImage.html">QVImage&lt;uChar&gt;</a> image_planes[3];
<a name="l00175"></a>00175     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = 0;
<a name="l00176"></a>00176     <span class="keywordflow">while</span>(videoReader.<a class="code" href="classQVVideoReader.html#a9dacd1ed256f1f48a193314d7e876140" title="Grabs next frame in video source, saving corresponding image(s) in class internal...">grab</a>())
<a name="l00177"></a>00177         {
<a name="l00178"></a>00178         QStringList imagenames;
<a name="l00179"></a>00179         <span class="keywordflow">if</span>(mode==0)
<a name="l00180"></a>00180             {
<a name="l00181"></a>00181             videoReader.<a class="code" href="classQVVideoReader.html#a7922b56a1ea4e76444aeda9ea4a3d093" title="Gets current frame in the form of a 3 channel RGB image.">getRGBImage</a>(imageRGB);
<a name="l00182"></a>00182             imagenames.append(QString(<span class="stringliteral">&quot;frame-RGB-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00183"></a>00183             }
<a name="l00184"></a>00184         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mode==1)
<a name="l00185"></a>00185             {
<a name="l00186"></a>00186             videoReader.<a class="code" href="classQVVideoReader.html#a7922b56a1ea4e76444aeda9ea4a3d093" title="Gets current frame in the form of a 3 channel RGB image.">getRGBImage</a>(image_planes[0],image_planes[1],image_planes[2]);
<a name="l00187"></a>00187             imagenames.append(QString(<span class="stringliteral">&quot;frame-R-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00188"></a>00188             imagenames.append(QString(<span class="stringliteral">&quot;frame-G-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00189"></a>00189             imagenames.append(QString(<span class="stringliteral">&quot;frame-B-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00190"></a>00190             }
<a name="l00191"></a>00191         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mode==2)
<a name="l00192"></a>00192             {
<a name="l00193"></a>00193             videoReader.<a class="code" href="classQVVideoReader.html#a7c9765c5ed51cdf2349e456dc7a6f3f2" title="Gets current frame in the form of a gray image.">getGrayImage</a>(image_planes[0]);
<a name="l00194"></a>00194             imagenames.append(QString(<span class="stringliteral">&quot;frame-gray-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00195"></a>00195             }
<a name="l00196"></a>00196         <span class="keywordflow">else</span> <span class="comment">// if(mode==3)</span>
<a name="l00197"></a>00197             {
<a name="l00198"></a>00198             videoReader.<a class="code" href="classQVVideoReader.html#af79c7379cbbfc613b64d21a74eb7f8eb" title="Gets current frame in the form of a gray image channel (Y) and two chrominance image...">getYUVImage</a>(image_planes[0],image_planes[1],image_planes[2]);
<a name="l00199"></a>00199             imagenames.append(QString(<span class="stringliteral">&quot;frame-Y-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00200"></a>00200             imagenames.append(QString(<span class="stringliteral">&quot;frame-U-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00201"></a>00201             imagenames.append(QString(<span class="stringliteral">&quot;frame-V-%1.%2&quot;</span>).arg((<span class="keywordtype">short</span> <span class="keywordtype">int</span>)count,4,10,QChar(<span class="charliteral">&#39;0&#39;</span>)).arg(ext));
<a name="l00202"></a>00202             }
<a name="l00203"></a>00203         count++;
<a name="l00204"></a>00204         <span class="keywordflow">if</span>((count-1) % (skip+1) != 0)
<a name="l00205"></a>00205             <span class="keywordflow">continue</span>;
<a name="l00206"></a>00206         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0;i&lt;imagenames.size();i++)
<a name="l00207"></a>00207             {
<a name="l00208"></a>00208             QString imagename = imagenames[i];
<a name="l00209"></a>00209             std::cout &lt;&lt; <span class="stringliteral">&quot;Saving image &quot;</span> &lt;&lt; qPrintable(imagename) &lt;&lt; <span class="stringliteral">&quot;.\n&quot;</span>;
<a name="l00210"></a>00210             QImage qimage;
<a name="l00211"></a>00211             <span class="keywordflow">if</span>(mode==0)
<a name="l00212"></a>00212                 qimage = imageRGB;
<a name="l00213"></a>00213             <span class="keywordflow">else</span>
<a name="l00214"></a>00214                 qimage = <a class="code" href="classQVImage.html" title="Image representation class for the QVision.">QVImage&lt;uchar,3&gt;</a>(image_planes[i],image_planes[i],image_planes[i]);
<a name="l00215"></a>00215             qimage.save(imagename);
<a name="l00216"></a>00216             }
<a name="l00217"></a>00217         frames--;
<a name="l00218"></a>00218         <span class="keywordflow">if</span>(frames == 0)
<a name="l00219"></a>00219             <span class="keywordflow">break</span>;
<a name="l00220"></a>00220         }
<a name="l00221"></a>00221 
<a name="l00222"></a>00222     <span class="comment">// Print video reader information (for testing methods):</span>
<a name="l00223"></a>00223     std::cout &lt;&lt; <span class="stringliteral">&quot;Length of video source (in frames): &quot;</span> &lt;&lt; videoReader.<a class="code" href="classQVVideoReader.html#afea030febc7f6e776968d10079002e37" title="Gets the length of the video source.">getLength</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00224"></a>00224     std::cout &lt;&lt; <span class="stringliteral">&quot;Current position in video source (in frames): &quot;</span> &lt;&lt; videoReader.<a class="code" href="classQVVideoReader.html#ac169b0d7746551424f5ef4fe471a9c7d" title="Gets the current position in the video source.">getPos</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00225"></a>00225     std::cout &lt;&lt; <span class="stringliteral">&quot;Complete URL of video source: &quot;</span> &lt;&lt; qPrintable(videoReader.<a class="code" href="classQVVideoReader.html#a9aec25744053d21fb2b56f37e5187843" title="Returns the complete URL of the video source.">getURL</a>()) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00226"></a>00226     std::cout &lt;&lt; <span class="stringliteral">&quot;URL scheme of video source: &quot;</span> &lt;&lt; qPrintable(videoReader.<a class="code" href="classQVVideoReader.html#aca5a2e877a2fac39ada8b47382849881" title="Returns the scheme of the video source.">getScheme</a>()) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00227"></a>00227     std::cout &lt;&lt; <span class="stringliteral">&quot;Number of columns of video source: &quot;</span> &lt;&lt; videoReader.<a class="code" href="classQVVideoReader.html#a05af873ddd0778c8d34a7fe5adc00a1d" title="Returns the number of cols for current frame in the video source.">getCols</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00228"></a>00228     std::cout &lt;&lt; <span class="stringliteral">&quot;Number of rows of video source: &quot;</span> &lt;&lt; videoReader.<a class="code" href="classQVVideoReader.html#a7e64e124eec398f4fb0dbf4263d1bb96" title="Returns the number of rows for current frame in the video source.">getRows</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00229"></a>00229     std::cout &lt;&lt; <span class="stringliteral">&quot;FPS of video source: &quot;</span> &lt;&lt; videoReader.<a class="code" href="classQVVideoReader.html#a096e32912c250dad3e827f1282e1a0ba" title="Returns the number of frames per second of the video source.">getFPS</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;
<a name="l00230"></a>00230 
<a name="l00231"></a>00231     <span class="comment">// Close source:</span>
<a name="l00232"></a>00232     videoReader.<a class="code" href="classQVVideoReader.html#ab9f4cfa4e439e0bb5ffd377e514de091" title="Closes the video source.">close</a>();
<a name="l00233"></a>00233     std::cout &lt;&lt; <span class="stringliteral">&quot;Done!\n&quot;</span>;
<a name="l00234"></a>00234     }
</pre></div></div>
</td></tr></table>

<br /><hr><br />
<center><a href="http://perception.inf.um.es/QVision">QVision framework</a>.
<a href="http://perception.inf.um.es">PARP research group</a>.
Copyright &copy; 2007, 2008, 2009, 2010, 2011.</center>
<br />
</body>
</html>
